package com.hqhy.like.front.order.service;

import com.hqhy.like.common.consts.data.MallConsts;
import com.hqhy.like.common.pojo.authentication.CurrentPrincipal;
import com.hqhy.like.common.pojo.vo.PageData;
import com.hqhy.like.front.order.pojo.param.OrderAddNewParam;
import com.hqhy.like.front.order.pojo.param.OrderQueryParam;
import com.hqhy.like.front.order.pojo.param.OrderSearchParam;
import com.hqhy.like.front.order.pojo.param.OrderUpdateInfoParam;
import com.hqhy.like.front.order.pojo.vo.OrderStandardVO;
import com.hqhy.like.front.order.pojo.vo.OrderTableVO;

public interface IOrderService extends MallConsts {

    /**
     * 创建订单
     *
     * @param currentPrincipal 当事人
     * @param orderAddNewParam 创建订单的参数对象
     * @return 订单ID
     */
    Long create(CurrentPrincipal currentPrincipal, OrderAddNewParam orderAddNewParam);


    /**
     * 根据订单ID删除订单
     *
     * @param orderId 订单ID
     */
    void deleteById(Long orderId);

    /**
     * 根据订单ID修改订单数据
     *
     * @param orderId 被修改的订单数据的ID
     * @param orderUpdateInfoParam 订单的新数据
     */
    void updateInfoById(Long orderId, OrderUpdateInfoParam orderUpdateInfoParam);

    /**
     * 根据订单ID查询订单详情
     *
     * @param orderId 订单ID
     * @return 订单详情
     */
    OrderStandardVO getStandardById(Long orderId);

    /**
     * 根据订单编号查询订单桌台数据
     *
     * @param orderNo 订单编号
     * @return 订单桌台数据
     */
    OrderTableVO getStandardByOrderNo(String orderNo);

    /**
     * 根据订单状态和下单状态查询订单
     *
     * @param orderSearchParam 查询订单详情的参数
     * @return 订单列表
     */
    PageData<OrderStandardVO> listByStateAndMethod(OrderSearchParam orderSearchParam);

    /**
     * 根据下单方式查询已接单和待取餐（orderState=1，2，3）的订单
     *
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @param orderMethod 下单方式
     * @return 订单列表
     */
    PageData<OrderStandardVO> listAllCheckByMethod(Integer pageNum, Integer pageSize, Integer orderMethod);

    /**
     * 根据下单方式查询已接单和待取餐（orderState=1，2，3）的订单, 将使用默认的每页记录数
     *
     * @param pageNum 页码
     * @param orderMethod 下单方式
     * @return 订单列表
     */
    PageData<OrderStandardVO> listAllCheckByMethod(Integer pageNum, Integer orderMethod);

    /**
     * 查询订单桌台数据
     *
     * @param orderQueryParam 查询订单桌台信息的参数
     * @return 订单桌台列表
     */
    PageData<OrderTableVO> listOrderForTable(OrderQueryParam orderQueryParam);

    /**
     * 根据条件查询订单详情
     *
     * @param orderSearchParam 查询订单详情的参数
     * @return 订单列表
     */
    PageData<OrderStandardVO> searchByCondition(OrderSearchParam orderSearchParam);

}
